/**
 * 统一的提示工具类
 * 提供更好的用户体验
 */

/**
 * 显示成功提示
 * @param {String} message 提示信息
 * @param {Number} duration 显示时长，默认2000ms
 */
export function showSuccess(message, duration = 2000) {
	uni.showToast({
		title: message,
		icon: 'success',
		duration: duration,
		mask: true
	})
}

/**
 * 显示错误提示
 * @param {String} message 错误信息
 * @param {Number} duration 显示时长，默认3000ms
 */
export function showError(message, duration = 3000) {
	uni.showToast({
		title: message,
		icon: 'none',
		duration: duration,
		mask: true
	})
}

/**
 * 显示警告提示
 * @param {String} message 警告信息
 * @param {Number} duration 显示时长，默认2500ms
 */
export function showWarning(message, duration = 2500) {
	uni.showToast({
		title: message,
		icon: 'none',
		duration: duration,
		mask: true
	})
}

/**
 * 显示加载提示
 * @param {String} message 加载信息，默认"加载中..."
 */
export function showLoading(message = '加载中...') {
	uni.showLoading({
		title: message,
		mask: true
	})
}

/**
 * 隐藏加载提示
 */
export function hideLoading() {
	uni.hideLoading()
}

/**
 * 显示确认对话框
 * @param {String} title 标题
 * @param {String} content 内容
 * @param {Object} options 选项
 */
export function showConfirm(title, content, options = {}) {
	return new Promise((resolve, reject) => {
		uni.showModal({
			title: title,
			content: content,
			showCancel: options.showCancel !== false,
			cancelText: options.cancelText || '取消',
			confirmText: options.confirmText || '确定',
			success: (res) => {
				if (res.confirm) {
					resolve(true)
				} else {
					resolve(false)
				}
			},
			fail: (err) => {
				reject(err)
			}
		})
	})
}

/**
 * 根据错误对象显示合适的错误提示
 * @param {Object|String} error 错误对象或错误信息
 * @param {String} defaultMessage 默认错误信息
 */
export function showErrorFromObject(error, defaultMessage = '操作失败') {
	let errorMessage = defaultMessage
	
	if (typeof error === 'string') {
		errorMessage = error
	} else if (error && typeof error === 'object') {
		if (error.code && error.message) {
			// 业务错误（如API返回的错误）
			errorMessage = error.message
		} else if (error.message) {
			// 网络错误或其他错误
			errorMessage = error.message
		} else if (error.errMsg) {
			// uni-app网络请求错误
			if (error.errMsg.includes('timeout')) {
				errorMessage = '请求超时，请检查网络连接'
			} else if (error.errMsg.includes('fail')) {
				errorMessage = '网络请求失败，请稍后重试'
			} else {
				errorMessage = error.errMsg
			}
		}
	}
	
	showError(errorMessage)
}

/**
 * 常用错误信息映射
 */
export const ERROR_MESSAGES = {
	NETWORK_ERROR: '网络连接失败，请检查网络设置',
	TIMEOUT_ERROR: '请求超时，请稍后重试',
	SERVER_ERROR: '服务器错误，请稍后重试'
}

export default {
	showSuccess,
	showError,
	showWarning,
	showLoading,
	hideLoading,
	showConfirm,
	showErrorFromObject,
	ERROR_MESSAGES
}